// 2025.07.03 23:56:56 星期四 晴 无事 今天 瞅了 一眼 吕 挺好的 还跟 迪士尼 打pk 晚上 还举办了 灯牌升级 仪式

import { toStringTypeCheck } from '../../../toStringTypeCheck';
import { diff_prop_typeArr } from '../../Classes/cla_diff_prop';
import {
  explore_for_diff,
  explore_for_diffTag,
  prop_static_default_val,
} from '../../Classes/cla_explore_for_diff';
import { compare_by_type } from './Func/compare_by_type';
import { diff_check_type } from './Func/diff_check_type';

// 这个是 重新 写 A B 信息 比对  返回 相较 A 的 信息 变动

// 你呢 还在 写 之前的 代码 吃 屎呢 .. 哈哈 :) 没人爱你呦~

// 2025.07.10 12:34:34 晴 他们 一个个 沉默着 说了 我也想去 就没后续了 就这 还要有什么关系？
// 一天给一百 我都嫌 给的多 我 天天 吃不上饭 比我 在 出租屋 里 还难受
// 至少 每天 还有个 保底的 十块钱 的 晚饭 这 啥也没有 说我 是个废物 未必 这 一行的 代码 不比你 性命 更值钱？ 啊 ？

// 昨天 龙 发视频 说 掉多少头发 算脱发 我咋理 我也想回 啊 从一开始 就说 要你要我 微信 你加我 这都 一年有余了
// 说我 哪儿哪儿不对 要我离远点 实在生气 说两句 轮到你 说话了？ 后来 道歉 我也欣然接受
// 我 甚至 六一 生气 当天 跟他说 我不想 跟他们过了 要逃离这里
// 也是第二天 终于有了我 想要的 回应 说 那 我是该准备 一杯咖啡 还是 我的 一生
// 我 知道 后续 大致 发生了 什么 而且 我也答应过 实话实说 就说了 按照预言来说 准备一杯咖啡 就行
// 好家伙 之后 又 挂勾掉了 说了 我不想呆了 接走不就是了 你在干嘛？ ？？？

// 2025.07.10 13:11:11 人家 回忆 昨晚的事 打牌 抡拳 还是 高估 你自己了 傻逼

/**
 * 依据 a 目标 比对 b 目标 的 增删 改 情况
 * 以 moreSame 进行 判定
 *
 * 您需要 手动 展开 对象 new explore_for_diff(targetA)
 * @param {explore_for_diff} targetA
 * @param {explore_for_diff} targetB
 */
function compare_A_B(targetA: explore_for_diff, targetB: explore_for_diff) {
  // 初始 元素 类型 检测
  if (!diff_check_type(targetA, targetB)) {
    return;
  }

  // tb 类型 未展开 时 真值 比对
  if (!toStringTypeCheck(targetB, explore_for_diffTag)) {
    if (targetA == targetB) {
      return new diff_prop_typeArr.static(targetB);
    } else {
      return new diff_prop_typeArr.valueNoSame(targetA, targetB);
    }
  }

  // 如果 有 原始值 比对原始值 是否相同
  if (targetB[prop_static_default_val] != undefined) {
    if (targetA[prop_static_default_val] == targetB[prop_static_default_val]) {
      return new diff_prop_typeArr.static(targetB[prop_static_default_val]);
    } else {
      return new diff_prop_typeArr.valueNoSame(
        targetA[prop_static_default_val],
        targetB[prop_static_default_val]
      );
    }
  }

  return compare_by_type(targetA, targetB);
}

export { compare_A_B };
